package com.hsh.server.project.userinfo.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hsh.server.constant.CustomException;
import com.hsh.server.constant.HttpStatus;
import com.hsh.server.project.user.entity.TAppUser;
import com.hsh.server.project.userinfo.domain.TAppUserInfo;
import com.hsh.server.project.userinfo.mapper.TAppUserInfoMapper;
import com.hsh.server.project.userinfo.service.ITAppUserInfoService;
import com.hsh.server.util.DateUtils;
import com.hsh.server.util.R;
import com.hsh.server.util.StringUtils;
import com.hsh.server.util.redis.JwtWithHutoolExample;
import com.hsh.server.util.redis.RedisConstants;
import com.hsh.server.util.redis.TokenServiceTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 【请填写功能名称】Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-04-22
 */
@Service
public class TAppUserInfoServiceImpl implements ITAppUserInfoService
{
    @Autowired
    private TAppUserInfoMapper tAppUserInfoMapper;
    @Autowired
    private TokenServiceTask tokenServiceTask;

    /**
     * 查询【请填写功能名称】
     * 
     * @param id 【请填写功能名称】主键
     * @return 【请填写功能名称】
     */
    @Override
    public TAppUserInfo selectTAppUserInfoById(Long id)
    {
        return tAppUserInfoMapper.selectTAppUserInfoById(id);
    }

    /**
     * 查询【请填写功能名称】列表
     * 
     * @param tAppUserInfo 【请填写功能名称】
     * @return 【请填写功能名称】
     */
    @Override
    public List<TAppUserInfo> selectTAppUserInfoList(TAppUserInfo tAppUserInfo)
    {
        return tAppUserInfoMapper.selectTAppUserInfoList(tAppUserInfo);
    }

    /**
     * 新增【请填写功能名称】
     * 
     * @param tAppUserInfo 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int insertTAppUserInfo(TAppUserInfo tAppUserInfo)
    {
        return tAppUserInfoMapper.insertTAppUserInfo(tAppUserInfo);
    }

    /**
     * 修改【请填写功能名称】
     * 
     * @param tAppUserInfo 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int updateTAppUserInfo(TAppUserInfo tAppUserInfo)
    {
        return tAppUserInfoMapper.updateTAppUserInfo(tAppUserInfo);
    }

    /**
     * 批量删除【请填写功能名称】
     * 
     * @param ids 需要删除的【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteTAppUserInfoByIds(Long[] ids)
    {
        return tAppUserInfoMapper.deleteTAppUserInfoByIds(ids);
    }

    /**
     * 删除【请填写功能名称】信息
     * 
     * @param id 【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteTAppUserInfoById(Long id)
    {
        return tAppUserInfoMapper.deleteTAppUserInfoById(id);
    }

    @Override
    public R appLogin(TAppUserInfo tAppUser) {
        if (StringUtils.isEmpty(tAppUser.getAccount())||StringUtils.isEmpty(tAppUser.getPassword())) {
            return R.error("账号或密码不能为空");
        }
        //效验账号是否存在
        TAppUserInfo account =  tAppUserInfoMapper.selectTAppUserByAccount(tAppUser);
        if (account==null) {
            return R.error("用户账号不存在，请注册");
        }

        //判断密码是否正确
        if (!account.getPassword().equals(tAppUser.getPassword())) {
            return R.error("密码错误");
        }
        String token = JwtWithHutoolExample.generateJwt(account.getId()+"");
        // 创建 ObjectMapper 实例
        ObjectMapper objectMapper = new ObjectMapper();
        String  jsonAccount ="";
        try {
            jsonAccount = objectMapper.writeValueAsString(account);
        } catch (
                JsonProcessingException e) {
            e.printStackTrace();
            throw new CustomException("转换对象错误", HttpStatus.ERROR);
        }

        tokenServiceTask.setTokenWithTime(RedisConstants.LOGIN_USER_KEY+ account.getId(), jsonAccount, 43200, TimeUnit.MINUTES);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("token", token);
        map.put("userInfo", account);
        return R.success("登陆成功",map);
    }

    @Override
    public R register(TAppUserInfo tAppUser) {
        if (StringUtils.isEmpty(tAppUser.getPassword())||StringUtils.isEmpty(tAppUser.getAccount())) {
            return R.error("账号或密码不能为空");
        }
        tAppUser.setCreateTime(DateUtils.getNowDate());
        TAppUserInfo account = tAppUserInfoMapper.selectTAppUserByAccount(tAppUser);
        if(account!=null){
            return R.error("该账号已经存在");
        }
        tAppUserInfoMapper.insertTAppUserInfo(tAppUser);
        return R.success("注册成功");
    }
}
